<?php
/* *
 * 功能：即时到账交易接口接入页
 * 版本：3.4
 * 修改日期：2016-03*08
 * 说明：
 * 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
 * 该代码仅供学习和研究支付宝接口使用，只是提供一个参考。

 *************************注意*****************
 
 *如果您在接口集成过程中遇到问题，可以按照下面的途径来解决
 *1、开发文档中心（https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.KvddfJ&treeId=62&articleId=103740&docType=1）
 *2、商户帮助中心（https://cshall.alipay.com/enterprise/help_detail.htm?help_id=473888）
 *3、支持中心（https://support.open.alipay.com/alipay/support/index.htm）

 *如果想使用扩展功能,请按文档要求,自行添加到parameter数组即可。
 **********************************************
 */
class AlipayapiAction extends CommonAction {
	 //在类初始化方法中，引入相关类库    
    function _initialize() {
        $this->error('非放访问');
        exit;

    	import ( "@.ORG.Corefunction" );  //导入扩展类
    	import ( "@.ORG.Md5function" );  //导入扩展类
    	import ( "@.ORG.Notify" );  //导入扩展类
    	import ( "@.ORG.Submit" );  //导入扩展类 
    }

    //doalipay方法
        /*该方法其实就是将接口文件包下alipayapi.php的内容复制过来
          然后进行相关处理
          $gouwu_id订单的id
          $name商品名称
          $money支付金额
        */
    public function doalipay($gouwu_id, $name, $money)
    {

    	//这里我们通过TP的C函数把配置项参数读出，赋给$alipay_config；
        	$alipay_config=C('alipay_config'); 

		/**************************请求参数**************************/
	        //商户订单号，商户网站订单系统中唯一订单号，必填
	        $out_trade_no = $gouwu_id;

	        //订单名称，必填
	        $subject = $name;

	        //付款金额，必填
	        $total_fee = $money;

	        //商品描述，可空
	        // $body = ;

		/************************************************************/

		//构造要请求的参数数组，无需改动
		$parameter = array(
			"service"       => C('alipay_config.service'),
			"partner"       => C('alipay_config.partner'),
			"seller_id"     => C('alipay_config.seller_id'),
			"payment_type"	=> C('alipay_config.payment_type'),
			"notify_url"	=> C('alipay_config.notify_url'),
			"return_url"	=> C('alipay_config.return_url'),
			
			"anti_phishing_key"  => C('alipay_config.anti_phishing_key'),
			"exter_invoke_ip"    => C('alipay_config.exter_invoke_ip'),
			"out_trade_no"	     => $out_trade_no,
			"subject"	         => $subject,
			"total_fee"	         => $total_fee,
			"body"	             => $body,
			"_input_charset"	 => trim(strtolower(C('alipay_config.input_charset')))
			//其他业务参数根据在线开发文档，添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.kiX33I&treeId=62&articleId=103740&docType=1
	        //如"参数名"=>"参数值"
			
		);
		// var_dump($parameter);
		// exit;
		//建立请求
		$alipaySubmit = new AlipaySubmit($alipay_config);
		$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
		echo $html_text;
	}
	 
	/******************************
    服务器异步通知页面方法
    其实这里就是将notify_url.php文件中的代码复制过来进行处理       
	 *******************************/
	public function notifyurl()
	{
	    /*
	    同理去掉以下两句代码；
	    */ 
	    //require_once("alipay.config.php");
	    //require_once("lib/alipay_notify.class.php");
	    
	    //这里还是通过C函数来读取配置项，赋值给$alipay_config
        $alipay_config=C('alipay_config');
        //计算得出通知验证结果
        $alipayNotify = new AlipayNotify($alipay_config);
        $verify_result = $alipayNotify->verifyNotify();
        if($verify_result) 
        {
           //验证成功
           //获取支付宝的通知返回参数，可参考技术文档中服务器异步通知参数列表
           if($_POST['trade_status'] == 'TRADE_FINISHED') 
           {
           		/*-------------进来这里说明付款成功，开始执行业务逻辑-------------*/
    //        		$out_trade_no = $_POST['out_trade_no'];
    //        		$gouwu_id = M('gouwu') ->where(array('countid'=>$out_trade_no)) ->getField('id');
				// A('Public') ->fukuanXG(3, $gouwu_id, $total_fee);



               $out_trade_no = $_POST['out_trade_no'];
               $gp_order=M('gp_order');
               $res = $gp_order->execute("update __TABLE__ set is_pay=1,pay_time=".time()." where id=".$out_trade_no);
               if ($res){

                   //购买公排
                   $dingdan=$gp_order->where(array('id'=>$out_trade_no,'is_pay'=>1))->find();
                   if ($dingdan['type'] ==0){
                       D('Fck')->create_info_fck2($dingdan['fck_id'],1);
                   }

                   //充值
                   if ($dingdan['type'] ==1){
                       M('fck')->execute("update __TABLE__ set agent_cash=agent_cash+".$dingdan['money']." where id=".$dingdan['fck_id']);
                   }

                   $bUrl = __APP__."/Gouwu/gpai";
                   $this->_box(1,'付款支付！',$bUrl,1);
               }


	   		}

            echo "success"; //请不要修改或删除
        }else{
            $out_trade_no   = $_GET['out_trade_no'];      //商户订单号

            M('gp_order')->where('id='.$out_trade_no)->delete();

            $bUrl = __APP__."/Gouwu/gpai";
            $this->_box(1,'付款失败，已撤销订单！',$bUrl,1);
            exit;

            //验证失败
            echo "fail";	//请不要修改或删除
        }    
	}
	    
	/*
	页面跳转处理方法；
	这里其实就是将return_url.php这个文件中的代码复制过来，进行处理； 
	*/
	public function returnurl()
	{
         //头部的处理跟上面两个方法一样，这里不罗嗦了！
        $alipay_config =C('alipay_config');
        $alipayNotify = new AlipayNotify($alipay_config);//计算得出通知验证结果
        $verify_result = $alipayNotify->verifyReturn();
        if($verify_result) 
        {
		    //验证成功
		    //获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表
		    $out_trade_no   = $_GET['out_trade_no'];      //商户订单号
		    $trade_no       = $_GET['trade_no'];          //支付宝交易号
		    $trade_status   = $_GET['trade_status'];      //交易状态
		    $total_fee      = $_GET['total_fee'];         //交易金额
		    $notify_id      = $_GET['notify_id'];         //通知校验ID。
		    $notify_time    = $_GET['notify_time'];       //通知的发送时间。
		    $buyer_email    = $_GET['buyer_email'];       //买家支付宝帐号；
		        
			if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
				/*-----支付宝支付成功后调用一个方法----*/
//				$gouwu_id = M('gouwu') ->where(array('zhifuPay_dan'=>$out_trade_no)) ->field('id') ->find();
//				A('Public') ->fukuanXG(3, $gouwu_id['id'], $total_fee);


                $gp_order=M('gp_order');
                $res = $gp_order->execute("update __TABLE__ set is_pay=1,pay_time=".time()." where id=".$out_trade_no);
                if ($res){

                    //购买公排
                    $dingdan=$gp_order->where(array('id'=>$out_trade_no,'is_pay'=>1))->find();
                    if ($dingdan['type'] ==0){
                        D('Fck')->create_info_fck2($dingdan['fck_id'],1);
                    }

                    //充值
                    if ($dingdan['type'] ==1){
                        M('fck')->execute("update __TABLE__ set agent_cash=agent_cash+".$dingdan['money']." where id=".$dingdan['fck_id']);
                    }

                    $bUrl = __APP__."/Gouwu/gpai";
                    $this->_box(1,'付款支付！',$bUrl,1);
                }
			}else {
                M('gp_order')->where('id='.$out_trade_no)->delete();

                $bUrl = __APP__."/Gouwu/gpai";
				$this->_box(1,'付款失败，已撤销订单！',$bUrl,1);
			    exit;
			    // $this->redirect(C('alipay_config.errorpage'));//跳转到配置项中配置的支付失败页面；
			}
		}else {
		    //验证失败
		    //如要调试，请看alipay_notify.php页面的verifyReturn函数
            $out_trade_no   = $_GET['out_trade_no'];      //商户订单号
            M('gp_order')->where('id='.$out_trade_no)->delete();
            $bUrl = __APP__."/Gouwu/gpai";
            $this->_box(1,'付款失败，已撤销订单！',$bUrl,1);
		    exit;
		}
	}
}
?>